package com.sali.DP;

/**
 * 给你一个只包含 '(' 和 ')' 的字符串，找出最长有效（格式正确且连续）括号子串的长度。
 */
public class LeetCode_32 {

    public int longestValidParentheses(String s) {
        if (s.length() <= 1) {
            return 0;
        }
        int[] dp = new int[s.length()];

        int maxRes = 0;
        for (int i = 1; i < s.length(); i++) {
            if (s.charAt(i) != ')') {
                continue;
            }
            if (s.charAt(i - 1) == '(') {
                dp[i] = i - 2 >= 0 ? dp[i - 2] + 2 : 2;
            } else {
                if (i - dp[i - 1] > 0 && s.charAt(i - dp[i - 1] - 1) == '(') {
                    dp[i] = dp[i - 1] + (i - dp[i - 1] - 2 >= 0 ? dp[i - dp[i - 1] - 2] : 0) + 2;
                }
            }

            maxRes = Math.max(maxRes, dp[i]);
        }

        return maxRes;
    }

}
